#ifndef SAMPLER1_H
#define SAMPLER1_H

#include "cinterface/ISampler.h"
#include "defaultsampler.h"

namespace SPLINTER
{

    class Sampler1 : public ISampler
    {
    private:
        //class Derivation;

    private:
        int factor;

    public:
        Sampler1(int factor = 25);

        DenseVector operator()(DenseVector x) const override;
        const ISampler &derivation() const override;

    private:
        class Derivation : public ISampler
        {
        private:
            //class Derivation;

        private:
            int factor;

        private:
            Derivation(int factor = 25);

        public:
            DenseVector operator()(DenseVector x) const override;
            const ISampler &derivation() const override;
            friend class Sampler1;

        private:
            class Derivation2 : public ISampler
            {
            private:
                int factor;

            private:
                Derivation2(int factor = 25);

            public:
                DenseVector operator()(DenseVector x) const override;
                friend class Sampler1::Derivation;
            } m_derivation;

        } m_derivation;
    };

} // namespace SPLINTER
#endif